home *** CD-ROM | disk | FTP | other *** search
/ Skunkware 5 / Skunkware 5.iso / src / X11 / wais / x / qdisplay.c < prev    next >
C/C++ Source or Header  |  1995-05-09  |  14KB  |  445 lines

  1. /* WIDE AREA INFORMATION SERVER SOFTWARE:
  2.    No guarantees or restrictions.  See the readme file for the full standard
  3.    disclaimer.
  4.  
  5.    This is part of the X user-interface for the WAIS software.  Do with it
  6.    as you please.
  7.  
  8.    jonathan@Think.COM
  9.  *
  10.  * $Log:    qdisplay.c,v $
  11.  * Revision 1.10  92/04/28  15:29:31  jonathan
  12.  * Cleaned up ANSI specs on most function calls.
  13.  * 
  14.  * Revision 1.9  92/03/23  16:11:59  jonathan
  15.  * added save requester.
  16.  * 
  17.  * Revision 1.8  92/03/17  14:16:40  jonathan
  18.  * Added cursor support.
  19.  * 
  20. */
  21.  
  22. #ifndef lint
  23. static char *RCSid = "$Header: /tmp_mnt/net/quake/proj/wais/wais-8-b5/x/RCS/qdisplay.c,v 1.10 92/04/28 15:29:31 jonathan Exp $";
  24. #endif
  25.  
  26. #include "xwais.h"
  27. #include "cursor.h"
  28. #include "xwaisq.bit"
  29. #include "xwaist.bit"
  30.  
  31. void SetqIcon(parent)
  32. Widget parent;
  33. {
  34.   Arg args[1];
  35.   Pixmap icon_pixmap = None;
  36.  
  37.   XtSetArg (args[0], XtNiconPixmap, &icon_pixmap);
  38.   XtGetValues(parent, args, ONE);
  39.   if (icon_pixmap == None) {
  40.     XtSetArg(args[0], XtNiconPixmap, 
  41.          XCreateBitmapFromData(XtDisplay(parent),
  42.                    XtScreen(parent)->root,
  43.                    xwaisq_bits, xwaisq_width, xwaisq_height));
  44.     XtSetValues (parent, args, ONE);
  45.   }
  46. }
  47.  
  48. void SettIcon(parent)
  49. Widget parent;
  50. {
  51.   Arg args[1];
  52.   Pixmap icon_pixmap = None;
  53.  
  54.   XtSetArg (args[0], XtNiconPixmap, &icon_pixmap);
  55.   XtGetValues(parent, args, ONE);
  56.   if (icon_pixmap == None) {
  57.     XtSetArg(args[0], XtNiconPixmap, 
  58.          XCreateBitmapFromData(XtDisplay(parent),
  59.                    XtScreen(parent)->root,
  60.                    xwaist_bits, xwaist_width, xwaist_height));
  61.     XtSetValues (parent, args, ONE);
  62.   }
  63. }
  64.  
  65. Widget
  66. MakeQuestionPane(parent, question)
  67. Widget parent;
  68. XQuestion question;
  69. {
  70.   Widget frame, stringlabelwid, button, view;
  71.   static String
  72.     name = "";
  73.   Arg arglist[10];
  74.   Cardinal num_args;
  75.   static String items[] = {NULL};
  76.   Question q = question->q;
  77.  
  78.   num_args = 0;
  79.   XtSetArg(arglist[num_args], XtNtitle, q->name); num_args++;
  80.   XtSetArg(arglist[num_args], XtNiconName, q->name); num_args++;
  81.   question->window->shell = parent;
  82.   frame =
  83.     XtCreateManagedWidget("questionpopupform", formWidgetClass,
  84.               question->window->shell, NULL, ZERO);
  85.  
  86.   SetqIcon(question->window->shell);
  87.  
  88.   stringlabelwid =
  89.     MakeLabel(frame, "keywordlabel", "Tell me about:", NULL, NULL);
  90.   question->window->keywordwid =
  91.     MakeStringBox(frame, "keywords", "", stringlabelwid, NULL);
  92.  
  93.   searchButton = MakeCommandButton(frame, "wsearch", DoSearch,
  94.                  stringlabelwid, question->window->keywordwid, NULL);
  95.   stringlabelwid =
  96.     MakeLabel(frame, "qsourcelabel", "In Sources:",
  97.           NULL, NULL);
  98.  
  99.   num_args = 0;
  100. /*  XtSetArg (arglist[num_args], XtNforceBars, True); num_args++; */
  101.   XtSetArg (arglist[num_args], XtNallowVert, True); num_args++;
  102.  
  103.   view = XtCreateManagedWidget ("sview", viewportWidgetClass,
  104.                 frame, arglist, num_args);
  105.  
  106.   question->window->Sources =
  107.     MakeScrollList(view, "questionsource", question->Source_Items,
  108.            EditQuestionSource, NULL, NULL);
  109.  
  110.   stringlabelwid =
  111.     MakeLabel(frame, "qdoclabel", "Similar to:",
  112.           question->window->keywordwid, NULL);
  113.  
  114.   num_args = 0;
  115. /*  XtSetArg (arglist[num_args], XtNforceBars, True); num_args++;*/
  116.   XtSetArg (arglist[num_args], XtNallowVert, True); num_args++;
  117.  
  118.   view = XtCreateManagedWidget ("dview", viewportWidgetClass,
  119.                 frame, arglist, num_args);
  120.  
  121.   question->window->RelevantDocuments = 
  122.     MakeScrollList(view, "questiondoc", question->Relevant_Items,
  123.            ViewRelevant, NULL, NULL);
  124.  
  125.   addSourceButton = button =
  126.     MakeCommandButton(frame, "qaddsource", PopupSourceMenu,
  127.               view, NULL, NULL);
  128.   delSourceButton = button =
  129.     MakeCommandButton(frame, "qdeletesource", DeleteQuestionSource,
  130.               view, button, NULL);
  131.   addDocButton = button =
  132.     MakeCommandButton(frame, "qadddoc", AddResponseToQuestion,
  133.               view, NULL, NULL);
  134.   delDocButton = button =
  135.     MakeCommandButton(frame, "qdeletedoc", DeleteQuestionDoc,
  136.               view, button, NULL);
  137.  
  138.   stringlabelwid =
  139.     MakeLabel(frame, "qreslabel", "Resulting\ndocuments:",
  140.           NULL, NULL);
  141.  
  142.   viewbutton = button = 
  143.     MakeCommandButton(frame, "view", ViewResponse,
  144.               stringlabelwid, NULL, NULL);
  145.  
  146.   saveAsButton = button =
  147.     MakeCommandButton(frame, "qsave", ViewResponse,
  148.               button, NULL, NULL);
  149.  
  150.   abortButton = button =
  151.     MakeCommandButton(frame, "Abort", Abort,
  152.               button, NULL, NULL);
  153.  
  154.   helpButton = button =
  155.     MakeCommandButton(frame, "help", XwaisHelp,
  156.               button, NULL, NULL);
  157.   doneButton = button =
  158.     MakeCommandButton(frame, "qdone", CloseQuestionEdit,
  159.               button, NULL, NULL);
  160.  
  161.   num_args = 0;
  162.   XtSetArg (arglist[num_args], XtNallowVert, True); num_args++;
  163.  
  164.   view = XtCreateManagedWidget ("rview", viewportWidgetClass,
  165.                 frame, arglist, num_args);
  166.  
  167.   question->window->ResultDocuments = 
  168.     MakeScrollList(view, "questionresults", question->Result_Items,
  169.            ViewResponse, NULL, NULL);
  170.  
  171.   num_args = 0;
  172.   XtSetArg(arglist[num_args], XtNeditType, XawtextEdit); num_args++;
  173.   XtSetArg(arglist[num_args], XtNsensitive, False); num_args++;
  174.  
  175.   stringlabelwid =
  176.     MakeLabel(frame, "statuslabel", "Status:",
  177.           NULL, NULL);
  178.  
  179.   question->window->StatusWindow =
  180.     XtCreateManagedWidget("statusWindow", asciiTextWidgetClass,
  181.               frame, arglist, num_args);
  182.   return(question->window->shell);
  183. }
  184.  
  185. Widget
  186. MakeTextPopup(parent, t, name)
  187. Widget parent;
  188. Textbuff t;
  189. char *name;
  190. {
  191.   Widget frame, button;
  192.   Arg arglist[10];
  193.   Cardinal num_args;
  194.   static String items[] = {NULL};
  195.  
  196.   num_args = 0;
  197.   XtSetArg(arglist[num_args], XtNtitle, name); num_args++;
  198.   XtSetArg(arglist[num_args], XtNiconName, name); num_args++;
  199.   t->shell = XtCreatePopupShell("textpopup", applicationShellWidgetClass,
  200.                 parent, arglist, num_args);
  201.   frame =
  202.     XtCreateManagedWidget("questionpopupform", formWidgetClass,
  203.               t->shell, NULL, ZERO);
  204.  
  205.   num_args = 0;
  206.   XtSetArg(arglist[num_args], XtNeditType, XawtextRead); num_args++;
  207.   t->textwindow =
  208.     XtCreateManagedWidget("textWindow", asciiTextWidgetClass, frame, arglist, num_args);
  209.  
  210.   button = MakeCommandButton(frame, "addSection",addSection,
  211.                  t->textwindow, NULL, NULL);
  212.   button = MakeCommandButton(frame, "findKey", showKeyword,
  213.                  t->textwindow, button, NULL);
  214.   button = MakeCommandButton(frame, "showNext", showNext,
  215.                  t->textwindow, button, (XtPointer)t);
  216.   button = MakeCommandButton(frame, "showPrevious", showPrevious,
  217.                  t->textwindow, button, (XtPointer)t);
  218.   button = MakeCommandButton(frame, "filesave", SaveText,
  219.                  t->textwindow, button, NULL);
  220.   button = MakeCommandButton(frame, "tdone", EndText,
  221.                  t->textwindow, button, (XtPointer)t);
  222.  
  223.   MakeLabel(frame, "textstatuslabel", "Status:", button, NULL);
  224.   num_args = 0;
  225.   XtSetArg(arglist[num_args], XtNeditType, XawtextEdit); num_args++;
  226.   XtSetArg(arglist[num_args], XtNsensitive, False); num_args++;
  227.  
  228.   t->status =
  229.     XtCreateManagedWidget("textStatus", asciiTextWidgetClass, frame, arglist, num_args);
  230.  
  231.   SettIcon(t->shell);
  232.  
  233.   XtPopup(t->shell, XtGrabNone);
  234.  
  235.   return t->textwindow;
  236. }
  237.  
  238.  
  239. QuestionWindow
  240. MakeQuestionForm(question)
  241. XQuestion question;
  242. {
  243.   Widget frame, labelwid, stringlabelwid, button;
  244.   WidgetClass wclass;
  245.   static String
  246.     name = "";
  247.   Arg arglist[10];
  248.   Cardinal num_args;
  249.   static String items[] = {NULL};
  250.   int n;
  251.   float shown;
  252.   QuestionWindow result;
  253.   Question q = question->q;
  254.  
  255.   if((result = (QuestionWindow) s_malloc(sizeof(_QuestionWindow))) == NULL) {
  256.     XwaisPrintf("Unable to allocate space for new window.\n");
  257.     return(NULL);
  258.   }
  259.  
  260.   question->window = result;
  261.   q->CurrentSource = NO_ITEM_SELECTED;
  262.   q->CurrentRelDoc = NO_ITEM_SELECTED;
  263.   q->CurrentResDoc = NO_ITEM_SELECTED;
  264.  
  265.   result->shell = (Widget)MakeQuestionPane(top, question);
  266.  
  267.   ReplaceText(result->keywordwid, q->keywords);
  268.  
  269.   return(result);
  270. }
  271.  
  272. Widget
  273. MakeSourcePopup(parent)
  274. Widget parent;
  275. {
  276.   Widget shell, frame, labelwid, stringlabelwid, button;
  277.   WidgetClass wclass;
  278.   static String
  279.     namestring,
  280.   serverstring,
  281.   servicestring,
  282.   dbstring,
  283.   cost, units,
  284.   maintainer,
  285.   description;
  286.   int CurrentSource;
  287.  
  288.   namestring = "default";
  289.   serverstring = "localhost";
  290.   servicestring = "8000";
  291.   dbstring = "";
  292.   cost = "";
  293.   units = "";
  294.   maintainer = "";
  295.   description = "";
  296.  
  297.   shell = XtCreatePopupShell("sourcepopup", applicationShellWidgetClass,
  298.                  parent, NULL, ZERO);
  299.   frame = XtCreateManagedWidget("sourcepopupform", formWidgetClass,
  300.                 shell, NULL, ZERO);
  301.  
  302.   labelwid = MakeLabel(frame, "sourceditlabel", "Source Edit", NULL, NULL);
  303.  
  304.   stringlabelwid = MakeLabel(frame, "sourcenamelabel", "       Name:", labelwid, NULL);
  305.   snamewid = MakeStringBox(frame, "sourcename", namestring, labelwid, stringlabelwid);
  306.  
  307.   stringlabelwid = MakeLabel(frame, "serverlabel",     "     Server:", snamewid, NULL);
  308.   serverwid = MakeStringBox(frame, "server", serverstring, snamewid, stringlabelwid);
  309.  
  310.   stringlabelwid = MakeLabel(frame, "servicelabel", "    Service:", serverwid, NULL);
  311.   servicewid = MakeStringBox(frame, "service", serverstring, serverwid, stringlabelwid);
  312.  
  313.   stringlabelwid = MakeLabel(frame, "dblabel",      "   Database:", stringlabelwid, NULL);
  314.   dbwid = MakeStringBox(frame, "database", dbstring, servicewid, stringlabelwid);
  315.  
  316.   stringlabelwid = MakeLabel(frame, "costlabel",    "       Cost:", stringlabelwid, NULL);
  317.   costwid = MakeStringBox(frame, "cost", cost, dbwid, stringlabelwid);
  318.  
  319.   stringlabelwid = MakeLabel(frame, "unitlabel",    "      Units:", stringlabelwid, NULL);
  320.   unitwid = MakeStringBox(frame, "costunit", units, costwid, stringlabelwid);
  321.  
  322.   stringlabelwid = MakeLabel(frame, "maintlabel",   " Maintainer:", stringlabelwid, NULL);
  323.   maintainerwid = MakeStringBox(frame, "maintainer", maintainer, unitwid, stringlabelwid);
  324.  
  325.   stringlabelwid = MakeLabel(frame, "desclabel",    "Description:", stringlabelwid, NULL);
  326.   descwid = MakeStringBox(frame, "description", description, stringlabelwid, NULL);
  327.  
  328.   button = MakeCommandButton(frame, "sdone", DoSSave, descwid, NULL, NULL);
  329.   MakeCommandButton(frame, "cancel", DontSSave, descwid, button, NULL);
  330.  
  331.   return shell;
  332. }
  333.  
  334. ScrollList
  335. MakeSourceFrame(parent)
  336. Widget parent;
  337. {
  338.   Widget frame, labelwid, button, view;
  339.   ScrollList result;
  340.   Arg arglist[10];
  341.   Cardinal num_args;
  342.  
  343.   num_args = 0;
  344.   XtSetArg(arglist[num_args], XtNtitle, "Sources"); num_args++;
  345.   XtSetArg(arglist[num_args], XtNiconName, "Sources"); num_args++;
  346.   sshell = XtCreatePopupShell("sourcepane", transientShellWidgetClass, 
  347.                   parent, arglist, num_args);
  348.   frame = XtCreateManagedWidget("sources", formWidgetClass, sshell, NULL, ZERO);
  349.  
  350.   num_args = 0;
  351. /*  XtSetArg (arglist[num_args], XtNforceBars, True); num_args++;*/
  352.   XtSetArg (arglist[num_args], XtNallowVert, True); num_args++;
  353.  
  354.   view = XtCreateManagedWidget ("ssview", viewportWidgetClass,
  355.                 frame, arglist, num_args);
  356.  
  357.   result =
  358.     MakeScrollList(view, "sourceWindow", Source_items, 
  359.            AddSourceToQuestion, NULL, NULL);
  360.  
  361.   button = MakeCommandButton(frame, "qsadd", AddSourceToQuestion,
  362.                  view, NULL, NULL);
  363.   return result;
  364. }
  365.  
  366. ScrollList
  367. MakeTypeFrame(parent)
  368. Widget parent;
  369. {
  370.   Widget frame, labelwid, button, view;
  371.   ScrollList result;
  372.   Arg arglist[10];
  373.   Cardinal num_args;
  374.  
  375.   num_args = 0;
  376.   XtSetArg(arglist[num_args], XtNtitle, "Types"); num_args++;
  377.   XtSetArg(arglist[num_args], XtNiconName, "Types"); num_args++;
  378.   typeshell = XtCreatePopupShell("typepane", transientShellWidgetClass, 
  379.                   parent, arglist, num_args);
  380.   frame = XtCreateManagedWidget("types", formWidgetClass, typeshell, NULL, ZERO);
  381.  
  382.   num_args = 0;
  383.   XtSetArg (arglist[num_args], XtNallowVert, True); num_args++;
  384.  
  385.   view = XtCreateManagedWidget ("typeview", viewportWidgetClass,
  386.                 frame, arglist, num_args);
  387.  
  388.   result =
  389.     MakeScrollList(view, "typeWindow", Type_items, doType, NULL, NULL);
  390.  
  391.   button = MakeCommandButton(frame, "None", doType,
  392.                  view, NULL, NULL);
  393.   return result;
  394. }
  395.  
  396. void
  397. MakeWaisCursors()
  398. {
  399.   int i;
  400.   XColor fore, back;
  401.   Pixmap cursor_pixmap, mask;
  402.  
  403.   back.red = 65535;
  404.   back.green = 65535;
  405.   back.blue = 65535;
  406.  
  407.   fore.red = 0;
  408.   fore.green = 0;
  409.   fore.blue = 0;
  410.  
  411.   mask = XCreateBitmapFromData(XtDisplay(top),
  412.                     XtScreen(top)->root,
  413.                     cursor_mask, cursor_width, cursor_height);
  414.   cursor_pixmap = XCreateBitmapFromData(XtDisplay(top),
  415.                     XtScreen(top)->root,
  416.                     cursor0_bits, cursor_width, cursor_height);
  417.   wais_cursors[0] = XCreatePixmapCursor(CurDpy, cursor_pixmap, mask, &fore, &back, 0, 0);
  418.  
  419.   cursor_pixmap = XCreateBitmapFromData(XtDisplay(top),
  420.                     XtScreen(top)->root,
  421.                     cursor1_bits, cursor_width, cursor_height);
  422.   wais_cursors[1] = XCreatePixmapCursor(CurDpy, cursor_pixmap, mask, &fore, &back, 0, 0);
  423.   cursor_pixmap = XCreateBitmapFromData(XtDisplay(top),
  424.                     XtScreen(top)->root,
  425.                     cursor2_bits, cursor_width, cursor_height);
  426.   wais_cursors[2] = XCreatePixmapCursor(CurDpy, cursor_pixmap, mask, &fore, &back, 0, 0);
  427.   cursor_pixmap = XCreateBitmapFromData(XtDisplay(top),
  428.                     XtScreen(top)->root,
  429.                     cursor3_bits, cursor_width, cursor_height);
  430.   wais_cursors[3] = XCreatePixmapCursor(CurDpy, cursor_pixmap, mask, &fore, &back, 0, 0);
  431.   cursor_pixmap = XCreateBitmapFromData(XtDisplay(top),
  432.                     XtScreen(top)->root,
  433.                     cursor4_bits, cursor_width, cursor_height);
  434.   wais_cursors[4] = XCreatePixmapCursor(CurDpy, cursor_pixmap, mask, &fore, &back, 0, 0);
  435.   cursor_pixmap = XCreateBitmapFromData(XtDisplay(top),
  436.                     XtScreen(top)->root,
  437.                     cursor5_bits, cursor_width, cursor_height);
  438.   wais_cursors[5] = XCreatePixmapCursor(CurDpy, cursor_pixmap, mask, &fore, &back, 0, 0);
  439.   cursor_pixmap = XCreateBitmapFromData(XtDisplay(top),
  440.                     XtScreen(top)->root,
  441.                     cursor6_bits, cursor_width, cursor_height);
  442.   wais_cursors[6] = XCreatePixmapCursor(CurDpy, cursor_pixmap, mask, &fore, &back, 0, 0);
  443. }
  444.  
  445.